package fi.uba.algocontrol.model.pistas;

import fi.uba.algocontrol.model.Mapa;
import fi.uba.algocontrol.model.Vector;

import java.util.Collection;
import java.util.LinkedList;
import java.util.Random;

public class PistaFactory
{
    private static PistaFactory INSTANCE = null;

    private PistaFactory()
    {
    }

    public static PistaFactory getInstance()
    {
        if (INSTANCE == null)
            INSTANCE = new PistaFactory();

        return INSTANCE;
    }

    private Vector generarPosicionAleatoria()
    {
        Random generadorRandom = new Random();
        generadorRandom.setSeed(generadorRandom.nextInt() + generadorRandom.nextInt()*10);
        Vector vector = new Vector( generadorRandom.nextInt(Mapa.getAncho()-100), generadorRandom.nextInt(Mapa.getAlto()-100)  );
        return vector;
    }


    public PistaSimple crearPistaSimple()
    {
        Vector posicion = this.generarPosicionAleatoria();
        Integer alto = 50;
        Integer ancho = 100;

        Entradas entradas = new Entradas();
        Entrada entrada = new Entrada( new Vector(posicion.getX(),posicion.getY()), new Vector(posicion.getX(),posicion.getY()+alto));
        entradas.add(entrada);

        return new PistaSimple( posicion, alto, ancho, entradas);
    }

    public PistaLarga crearPistaLarga()
    {
        Vector posicion = this.generarPosicionAleatoria();
        Integer alto = 50;
        Integer ancho = 150;

        Entradas entradas = new Entradas();
        Entrada entrada = new Entrada( new Vector(posicion.getX(),posicion.getY()), new Vector(posicion.getX(),posicion.getY()+alto));
        entradas.add(entrada);

        return new PistaLarga( posicion, alto, ancho, entradas);
    }

    public PistaDobleEntrada crearPistaDobleEntrada()
    {
        Vector posicion = this.generarPosicionAleatoria();
        Integer alto = 50;
        Integer ancho = 100;

        Entradas entradas = new Entradas();
        Entrada entrada = new Entrada( new Vector(posicion.getX(),posicion.getY()), new Vector(posicion.getX(),posicion.getY()+alto));
        entradas.add(entrada);

        return new PistaDobleEntrada( posicion, alto, ancho, entradas);
    }

    public Helipuerto crearHelipuerto()
    {
        Vector posicion = this.generarPosicionAleatoria();
        Integer alto = 50;
        Integer ancho = 50;

        Entradas entradas = new Entradas();
        Entrada entrada = new Entrada( new Vector(posicion.getX(),posicion.getY()), new Vector(posicion.getX(),posicion.getY()+alto));
        entradas.add(entrada);

        return new Helipuerto( posicion, alto, ancho, entradas);
    }
}
